package cn.tedu.review;
/**本类用于复写售票案例实现方案1*/
public class TestTread {
    public static void main(String[] args) {
        //创建多线程类对象
        TicketThread t1 = new TicketThread();//因为new了多个对象，所以成员变量和new Object()需要是静态的
        TicketThread t2 = new TicketThread();
        TicketThread t3 = new TicketThread();
        TicketThread t4 = new TicketThread();

        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }

}

//1.自定义多线程类
class TicketThread extends Thread{
    //3.定义一个变量，用来保存票数
    /**将票数设置为静态，静态资源被本类的所有对象共享，值只有一份，解决卖400张票的问题*/
    static int tickets = 100;
//    static Object o = new Object();
//    static Dog d = new Dog();
    //2.重写父类run()，里面是我们自己的业务
    @Override
    public void run() {
        while (true) {
            synchronized (TicketThread.class){//同步代码块解决的是重卖的问题
                //4.循环卖票
                if (tickets > 0){
                    //7.让线程休眠，增加线程状态切换的频率与出错的概率
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //打印当前正在售票的线程名，并且票数-1
                    System.out.println(getName()+":"+tickets--);
                }
            if (tickets <= 0) break;

        }



        }


    }
}
class Dog{
}